<?php 
class App_Form_Decorator_InnovaEditor extends Zend_Form_Decorator_Abstract
{
    /**
     * Получение строк подключения Javacript и CSS для календаря
     * Статическая переменная $jsAndCss отвечает за то, чтобу подключение
     * осуществлялось только один раз
     *
     * @return string
     */
    private function _getJsAndCss()
    {
        static $jsAndCss = null;
        
        if($jsAndCss === null) {

            $jsAndCss = '
<style>
    /*body{font:11px verdana,arial,sans-serif;}*/
   /* a{color:#cc0000;font-size:xx-small;}*/
  </style>
  
  <!-- STEP 1: Include the Editor js file -->
  <script language=JavaScript src="/js/innovaeditor/innovaeditor.js"></script>
            ';
            
            return $jsAndCss;
        }
        return '';
    }
    
    
    /**
     * Получение кода ссылки и изображения каледаря. Настройка календаря
     *
     * @return string
     */
    private function _getCalendarLink()
    {

        $calendarLink = '
<script> //STEP 2: Replace the textarea ('.$this->getElement()->getName().')
    var oEdit1 = new InnovaEditor("oEdit1");
    oEdit1.REPLACE("'.$this->getElement()->getName().'");//Specify the id of the textarea here
  </script>
        ';
        
        return $calendarLink;
    }
    
    
    /**
     * Рендеринг декоратора
     *
     * @param string $content
     * @return string
     */
    public function render($content)
    {
        // Получаем объект элемента к которому применяется декоратор
        $element = $this->getElement();
        if (!$element instanceof Zend_Form_Element) {
            return $content;
        }
        // Проверяем объект вида зарегистрированного для формы
        if (null === $element->getView()) {
            return $content;
        }
        
        // Расположение декоратора, "после" или "перед" элементом, по умолчанию "после"
        $placement = $this->getPlacement();
        // Разделитель между элементом и декоратором
        $separator = $this->getSeparator();
        
        // Взависимости от настроек расположения декоратора возвращаем содержимое
        switch  ($placement) {
            // После элемента
            case  'APPEND':
                return $this->_getJsAndCss() . $content . $separator . $this->_getCalendarLink();
            // Перед элементом
            case  'PREPEND':
                return $this->_getJsAndCss() . $this->_getCalendarLink() . $separator . $content;
            case  null:
            // По умолчанию просто возвращаем содержимое календаря
            default:
                return $this->_getJsAndCss() . $this->_getCalendarLink();
        }

    }
}

?>